home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / basic / ace_final.lha / ACE_GPL_Release / utils / NAP / NAP.dok < prev    next >
Encoding:
Text File  |  1996-08-29  |  19.2 KB  |  406 lines

  1.  
  2.  |\   |       |¯¯¯¯|       |¯¯¯¯|                        Version 2.00
  3.  | \  |       |____|       |____|                         17.08.1996
  4.  |  \ |       |    |       |                                Beta-3
  5.  |   \| e w   |    | C E   |     r e p r o c e s s o r
  6.  
  7.  
  8.  
  9.  E i n l e i t u n g
  10.  
  11.  Wie der Name schon sagt, ist NAP ein neuer Präprozessor für die Pro-
  12.  grammiersprache ACE.
  13.  
  14.  Bis jetzt wurde als  Präprozessor immer APP oder ein C-Präprozessor,
  15.  hauptsächlich CPP, eingesetzt. Beide Programme hatten Vor- und Nach-
  16.  teile.  Während APP keine Defines erkannte, dafür aber Kommentare im
  17.  ACE-Format entfernte, konnte CPP zwar Defines verarbeiten, aber lei-
  18.  der keine ACE-Kommentare entfernen, sondern nur welche im C-Format.
  19.  
  20.  NAP wurde konstruiert,  um sowohl die Fähigkeiten von APP,  als auch
  21.  die von CPP zu vereinen.  Natürlich fehlen noch viele Eigenschaften,
  22.  aber mit den bereits eingebauten sollten die meisten Wünsche zufrie-
  23.  dengestellt sein.
  24.  
  25.  
  26.  V o r g e s c h i c h t e
  27.  
  28.  Im Februar 1996 beschäftigte ich mich erstmals mit Includefiles. Ich
  29.  weiß nicht mehr,  was ich damals machen wollte,  jedenfalls brauchte
  30.  ich ein paar bestimmte Strukturen  und benutzte demzufolge eine #in-
  31.  clude-Anweisung, um diese Strukturen eingebunden zu bekommen.
  32.  Zu meiner großen Überraschung stellte ich dann aber fest,  daß  auch
  33.  viele  Strukturen  eingebunden worden waren,  die ich eigentlich gar
  34.  nicht brauchte.   Also dachte ich mir,  warum schreibe ich nicht ein
  35.  Programm,  was unbenutzte Strukturen und ACE-Kommentare entfernt und
  36.  gleichzeitig auch noch die gemeingefährlichen Kommentare,  die  ACPP
  37.  hinterließ. Gedacht war, daß dieses Programm,  genannt  RemoveStuff,
  38.  nach dem  Präprozessor  gestartet werden sollte und  dessen  Ausgabe
  39.  nochmals bearbeitete.  Desweiteren dachte ich mir,  daß man das Pro-
  40.  gramm ja später noch zu einem richtigen Präprozessor aufrüsten  kön-
  41.  ne.
  42.  Diese Idee ließ ich dann aber erstmal fallen, weil mir einige Sachen
  43.  nicht so ganz klar waren.  Herbert Breuer  sprach mich dann aber auf
  44.  RemoveStuff an und fragte,  ob man daraus nicht einen  vollständigen
  45.  Präprozessor machen könnte und einige Mails später fing ich dann mit
  46.  der Arbeit an. Die 1.x Versionen liefen dann auch einigermaßen,  wa-
  47.  ren aber nicht so besonders schnell.  Desweiteren wurde auch nur das
  48.  Präprozessorkommando #include erkannt.
  49.  
  50.  Aber in der Zwischenzeit sind wir schon bei Version 2.00.  Dies hier
  51.  ist die dritte offizielle Betaversion.
  52.  
  53.  
  54.  G e s c h w i n d i g k e i t
  55.  
  56.  Während die erste  Betaversion bei ihrer  Veröffentlichung schon  um
  57.  100% schneller war als bei der  ersten funktionierenden Version  von
  58.  2.0, die nicht veröffentlicht wurde, so ist 2.00b2 sogar noch einmal
  59.  um 200% schneller geworden.
  60.  
  61.  Zu Testzwecken wird immer ein bestimmtes Programm  (NAPtest.b)  ver-
  62.  wendet. ACPP braucht für dieses Programm 15 Sekunden. Zum Zeitpunkt,
  63.  wo ich dies hier schreibe, braucht NAP dafür 26 Sekunden.
  64.  Im folgenden folgt eine Liste über die Geschwindigkeitssteigerungen,
  65.  die ich bei NAP erzielt habe.  Diese Zahlen sind mit Vorsicht zu ge-
  66.  nießen. Erstens können Sie um ±1 Sekunde schwanken, desweiteren sind
  67.  sie auf einem  Amiga 500 mit KS1.3 und 1 Megabyte RAM ermittelt wor-
  68.  den.  Und zweitens mußten alle  Includedateien  von Diskette geladen
  69.  werden, was nochmals eine Verzögerung darstellt.
  70.  Rein theoretisch  könnte  NAP  auf einem modernen Amiga also der Ge-
  71.  schwindigkeit von CPP viel näher sein,  weil sich Ladezeiten verkür-
  72.  zen. Schneller ist es da sowieso,  ob um soviel schneller,  daß sich
  73.  der Unterschied zu CPP vernachlässigen läßt, muß sich zeigen.
  74.  
  75.  +---------+-----------+-------+-------------------+----------------+
  76.  | Version |   Datum   | Zeit  | Start ohne Option | Start mit -sqe |
  77.  +---------+-----------+-------+-------------------+----------------+
  78.  |         | 26.06.'96 | 14:20 |    194 Sekunden   |    unbekannt   |
  79.  |         | 27.06.'96 | 13:20 |    162 Sekunden   |    unbekannt   |
  80.  |         | 28.06.'96 | 14:30 |    151 Sekunden   |    unbekannt   |
  81.  |         | 29.06.'96 | 12:35 |    130 Sekunden   |    unbekannt   |
  82.  |         |           | 19:55 |    115 Sekunden   |    unbekannt   |
  83.  |         | 01.07.'96 | 15:30 |    100 Sekunden   |    unbekannt   |
  84.  |         |           | 20:40 |     87 Sekunden   |   92 Sekunden  |
  85.  |  2.00b  | 12.07.'96 | 12:30 |     88 Sekunden   |   88 Sekunden  |
  86.  +---------+-----------+-------+-------------------+----------------+
  87.  |         | 17.07.'96 | 23:45 |     33 Sekunden   |   31 Sekunden  |
  88.  |         | 19.07.'96 | 11:30 |     31 Sekunden   |   28 Sekunden  |
  89.  |  2.00b2 | 23.07.'96 | 20:00 |     26 Sekunden   |   22 Sekunden  |
  90.  +---------+-----------+-------+-------------------+----------------+
  91.  
  92.  Diese  Geschwindigkeitssteigerungen  konnten zum einen erreicht wer-
  93.  den, indem bestimmte ACE-Befehle durch schnellere  Assemblerroutinen
  94.  ersetzt wurden, zum anderen,  indem der  Sourcecode  stark optimiert
  95.  wurde.  Mitunter wurden sogar ganze  Abschnitte  vollkommen  neu ge-
  96.  schrieben.
  97.  Das große Ziel von mir ist es, daß NAP all das kann,  was  CPP kann,
  98.  aber dennoch nicht drastisch langsamer ist.  Damit stellt diese Ver-
  99.  sion ein Zwischending dar.
  100.  
  101.  
  102.  E I N S C H R Ä N K U N G E N
  103.  
  104.  Da seit  Version 1.1  drastische Änderungen in NAP eingetreten sind,
  105.  funktionieren natürlich auch einige Sachen noch nicht so, wie sie es
  106.  eigentlich sollen.  Das heißt nicht,  daß da Fehler in NAP sind,  es
  107.  sind nur einige unschöne  Nebeneffekte.  Wobei natürlich  Bugs  auch
  108.  nicht auszuschließen sind.  Aber deshalb ist  dies hier ja auch eine
  109.  Betaversion.
  110.  
  111.  - #include
  112.  
  113.    * Sobald NAP auf eine #include-Anweisung trifft, wird die spezifi-
  114.      zierte Datei eingebunden (vorausgesetzt, sie wurde nicht bereits
  115.      eingebunden). In dieser Datei kann natürlich wieder ein Include-
  116.      befehl auftauchen und so fort.
  117.      ACE stellt nun für Dateioperationen 9 Plätze zur Verfügung.  NAP
  118.      kann demzufolge nicht mehr als 9 Dateien gleichzeitig  offenhal-
  119.      ten. Eine Datei ist immer geöffnet, daß ist die Ausgabedatei.
  120.      Bis zum jetzigen Zeitpunkt waren bei mir nie mehr als 7  Dateien
  121.      gleichzeitig offen. Falls sich aber herausstellen sollte, daß es
  122.      Fälle gibt,  wo  mehr als 9 Dateien gleichzeitig geöffnet werden
  123.      müssen, dann wird sich das auch realisieren lassen.
  124.  
  125.  - #define
  126.  
  127.    * Defines sind grundsätzlich case-sensitiv (soll heißen, daß ein A
  128.      was anderes als ein a ist).  Da das aber bei  CPP  auch der Fall
  129.      ist, nehme ich mal an, daß das so Standard ist.
  130.  
  131.  - Kommentare
  132.  
  133.    * Blockkommentare dürfen nicht verschachtelt sein.  Das  wird zwar
  134.      sowieso keiner machen, aber es kann ja vorkommen, daß ein {} in-
  135.      nerhalb eines Blockkommentares benutzt wird,  um irgendetwas  zu
  136.      demonstrieren. (So passiert bei NAP v1.1, wo ich innerhalb eines
  137.      Blockkommentares sagen wollte,  daß in dem  folgenden  Unterpro-
  138.      gramm "alle C-Kommentare durch { } ersetzt" werden.)
  139.  
  140.  - Allgemein
  141.  
  142.    * Tabulatoren sind verboten!!! Sie kennzeichnen,  wie alle ASCII-
  143.      Zeichen, die kleiner (oder gleich) 10 sind,  daß Ende der Zeile.
  144.      Und ein Tab hat ASCII-Code 9.  In zukünftigen Versionen wird die
  145.      Beschränkung wahrscheinlich entfallen.
  146.  
  147.  
  148.  B E D I E N U N G
  149.  
  150.  NAP kann nur vom CLI aufgerufen werden.  Es verlangt ein Minimum von
  151.  2 Optionen : Ein- und Ausgabedatei. Optional können noch weitere Pa-
  152.  rameter übergeben werden, die mit einem Bindestrich eingeleitet wer-
  153.  den müssen und gewisse Aktionen erzwingen, bzw. unterdrücken (Optio-
  154.  nen).
  155.  
  156.  Aufruf: NAP [-option [-option [-...]]] <Eingabedatei> <Ausgabedatei>
  157.  
  158.  Optionen bestehen aus einem Buchstaben.  Falls mehrere Optionen  be-
  159.  nutzt werden, können Sie auch zusammengeschrieben werden.  Ausnahmen
  160.  bilden die Optionen,  die noch einen zusätzlichen Parameter verlang-
  161.  en.  Dieser  Parameter muß an den Optionsbuchstaben angehängt werden
  162.  (kein Leerzeichen dazwischen)  und muß von einem Leerzeichen gefolgt
  163.  sein. Falls dann noch weitere Optionen benutzt werden wollen, müssen
  164.  sie erneut mit einem Bindestrich eingeleitet werden.
  165.  
  166.  Im folgenden werden alle Optionen erklärt. Ein Großteil der Optionen
  167.  sind sogenannte Schalter.  Sie aktivieren oder deaktivieren eine Ei-
  168.  genschaft von NAP.
  169.  
  170.  
  171.  - Option S
  172.    Schaltet das Entfernen von Strukturen aus.
  173.  
  174.  - Option C
  175.    Kommentare werden nicht mehr entfernt.
  176.  
  177.  - Option Q
  178.    Defines werden nicht mehr innerhalb des Quelltextes ersetzt,  son-
  179.    dern durch CONST-Anweisungen ersetzt (Ausnahme: Strukturen).
  180.  
  181.  - Option I
  182.    Defines werden grundsätzlich ignoriert.
  183.  
  184.  - Option E
  185.    Fehlermeldungen und Warnungen werden nicht mehr ausgegeben.
  186.  
  187.  - Option B<buffersize>
  188.    Setzt den Lesebuffer auf <buffersize>*1000 Bytes.
  189.  
  190.  - Option H
  191.    Übersicht über alle Optionen.
  192.  
  193.  - Option D<token>[=<replacement>]
  194.    Definiert <token>, als ob innerhalb des Programmcodes die Zeile
  195.      #define <token> <replacement>
  196.    stehen  würde.  Falls <replacement> nicht mit angegeben wird, wird
  197.    eine 1 genommen.
  198.  
  199.  - Option U<token>
  200.    Entfernt  <token>,  als wenn  "#undef <token>"  geschrieben worden
  201.    wäre.
  202.  
  203.  - Option P<directory>
  204.    Fügt ein neues  Verzeichnis der  Liste von  Verzeichnissen zu, die
  205.    nach Includedateien durchsucht werden.  Es können 7 neue Verzeich.
  206.    nisse definiert werden.  Das aktuelle Verzeichnis und das logische
  207.    Verzeichnis ACEINCLUDE: sind immer definiert. Achten Sie darauf,
  208.    daß <directory> mit einem : oder einem / enden muß!
  209.  
  210.  
  211.  E I G E N S C H A F T E N
  212.  
  213.  NAP tut viele Sache. Einige sind mit Hilfe der Optionen an-, bezieh-
  214.  ungsweise abgeschaltet. Im folgenden wird die Arbeit NAPs beschrieb-
  215.  en, wenn die Grundeinstellung (keine Optionen) aktiv ist.
  216.  Zuerst checkt NAP,  ob sowohl die Eingabe- als auch die Ausgabedatei
  217.  geöffnet werden können.  Die Ausgabedatei wird, falls vorhanden, da-
  218.  bei gelöscht, was sich aber in späteren Versionen ändern könnte.  Im
  219.  folgenden geht NAP durch den Sourcecode aus der Eingabedatei und ko-
  220.  piert den Inhalt zeilenweise in die Ausgabedatei.  Dabei werden Kom-
  221.  mentare im C-Format grundsätzlich in ACE-Kommentare umgewandelt. Au-
  222.  ßerdem werden sämtliche Kommentare entfernt.  Das gilt ebenfalls für
  223.  Strukturen, die im Programm nicht benötigt werden.
  224.  Während der Bearbeitung der  Eingabedatei  werden auch  Ansammlungen
  225.  von Leerzeilen gekürzt.  Es müssen aber wirkliche  Leerzeilen  sein:
  226.  ein Leerzeichen in der Zeile macht die Arbeit schon zunichte. Außer-
  227.  dem wird in jeder Zeile gecheckt, ob ein Define vorhanden ist. Falls
  228.  dem so ist,  wird es ersetzt.  Eventuell übergebene Parameter werden
  229.  eingesetzt.
  230.  
  231.  
  232.  H I N W E I S E  . . .
  233.  
  234.  ... zu Defines:
  235.  
  236.   Defines werden ja bekanntlich folgendermaßen deklariert:
  237.  
  238.           #define <token> <replacement>
  239.  
  240.   NAP geht davon aus,  daß <token> keine Leerzeichen enthält.  Inner-
  241.   halb von  <replacement> dürfen aber Leerzeichen vorhanden sein.  Es
  242.   ist sogar möglich, <replacement> auf mehrere Zeilen aufzuteilen.
  243.   NAP hängt nämlich (momentan nur innerhalb von Defines) die nachfol-
  244.   gende Zeile an an <replacement> an, wenn das letzte Zeichen der ak-
  245.   tuellen Zeile ein Backslash (\) oder eine Tilde (~) ist.
  246.  
  247.  ... zu #IF-Anweisungen (wie auch für #ELIF)
  248.  
  249.   Obwohl es, glaube ich,  gegen den ANSI-C Standard ist, habe ich für
  250.   <expression> auch ein = mit eingefügt. Falls das Ergebnis der link-
  251.   en Seite identisch mit dem Ergebnis der rechten Seite ist, wird ei-
  252.   ne 1 zurückgeliefert, ansonsten eine 0. Vor und nach dem = muß imm-
  253.   er ein Leerzeichen stehen.
  254.   Ansonsten wird gecheckt, ob  <expression>  wahr ( <>0 ) oder unwahr
  255.   (=0) ist.  Momentan zulässige Rechenoperationen sind momentan +, -,
  256.   \, / und *.  Klammern dürfen benutzt werden,  allerdings dürfen sie
  257.   nicht verschachtelt sein.  Grundsätzlich werden Zahlen als Dezimal-
  258.   zahlen angegeben, wer Hex oder Octavzahlen verwenden will,  muß die
  259.   ACE-spezifischen Vorzeichen daranhängen! Da als Ergebnistype SINGLE
  260.   verwendet wird, kann es zu Ungenauigkeiten beim Ergebnis kommen.
  261.  
  262.  
  263.  B E K A N N T E   F E H L E R
  264.  
  265.  * NAP scheint einige Sonderzeichen,  wie das ©,  als Zeichen für das
  266.    Ende der Zeile zu interpretieren. Ich habe keinen  blassen  Dunst,
  267.    woran das liegen könnte.
  268.  * Da sich das Erkennen unbenutzter Strukturen danach richtet, welche
  269.    Strukturen deklariert wurden  und welche Strukturen  in Strukturen
  270.    eingebunden werden, die deklariert wurden, ..., kann es passieren,
  271.    und es wird auch passieren, daß Strukturen gelöscht werden, obwohl
  272.    Sie eigentlich gebraucht werden.  Und zwar dann, wenn diese Struk-
  273.    tur weder direkt noch indirekt deklariert wurde, sondern als Para-
  274.    meter der SIZEOF-Funktion eingesetzt wurde.  Dann löscht NAP diese
  275.    Struktur, aber ACE verlangt die dann natürlich noch.
  276.    Dieser Fehler sollte aber nur in den seltensten Fällen eintreten.
  277.  
  278.  Falls Sie mehr Fehler finden,  teilen  Sie mir das bitte mit  (siehe
  279.  Kapitel "Copyright").
  280.  
  281.  
  282.  
  283.  Z U K U N F T S A U S S I C H T E N
  284.  
  285.  NAP ist noch lange nicht vollständig.  Folgende Sachen schweben  mir
  286.  vor, die eventuell in den nächsten Versionen realisiert werden könn-
  287.  ten:
  288.  
  289.   - Geschwindigkeitssteigerung
  290.   - Aneinanderreihung von Zeilen, wenn \ oder ~ am Zeilenende stehen,
  291.     auch außerhalb von DEFINE-Anweisungen
  292.   - Einbau von weiteren Präprozessorkommandos (#ASSERT, #PRAGMA, ...)
  293.   - Benutzung von Tabulatoren
  294.   - weitere Optionen (wenn man sich die Anleitung von CPP durchliest,
  295.     fallen mir gleich mehrere Sachen ins Auge,  die NAP ebenfalls gut
  296.     stehen würden)
  297.   - (Ihre Ideen ...)
  298.  
  299.  
  300.  C O P Y R I G H T
  301.  
  302.  NAP ist Cardware.  Das heißt schlicht und einfach,  daß ich für  NAP
  303.  kein Geld verlange (heißt aber nicht, daß ich Geld ablehnen würde!),
  304.  sondern mich mit einer  Postkarte oder einem  Brief begnüge,  wo man
  305.  mitteilt, daß man NAP benutzt und wie es einem so gefällt.
  306.  Dieses Prinzip hat einen Sinn.  Erstens erfahre ich so, wie verbrei-
  307.  tet NAP ist  und was man darüber so denkt.  Zweitens komme ich so zu
  308.  ein paar schönen Briefmarken.  Also wenn sich wirklich jemand an das
  309.  Prinzip hält, kann er vielleicht eine schöne Briefmarke benutzen.
  310.  Wer nicht die Post beanspruchen will, kann auch eine EMail schicken.
  311.  Das bietet sich für Leute an, die viel zu sagen haben,  oder wo sich
  312.  dann ein längerer Briefaustausch ergibt. Desweiteren ziehe ich EMail
  313.  vor von Leuten aus Deutschland und osteuropäischen Ländern (weil ich
  314.  da schon genug Briefmarken habe ;).  Falls kein EMailzugang besteht,
  315.  können Sie aber trotzdem eine schöne Postkarte schicken.
  316.  Ich mache NAP zur Cardware, weil einerseits keiner Geld geben würde,
  317.  wenn es  Shareware  wäre,  ich aber dennoch etwas von meiner  Arbeit
  318.  haben will  (und eine Postkarte abzuschicken ist wohl in keinem Land
  319.  der Welt so teuer, daß man es sich nicht leisten kann. Also nur zu!)
  320.  
  321.  Ansonsten ist  NAP  das volle  Eigentum vom Autor und Programmierer.
  322.  Jegliche Änderung ist  strikt untersagt  und verstößt gegen geltende
  323.  internationale Copyrightabkommen.  Teile von NAPs Sourcecode, spezi-
  324.  ell Routinen wie Search2 aus NAP_Mods.b dürfen in eigenen Programmen
  325.  benutzt werden,  wenn Änderungen kenntlich gemacht werden und darauf
  326.  hingewiesen wird,  daß das  Copyright  an diesen Routinen immer noch
  327.  beim Autor von NAP liegt.  Falls an Programmen, die Routinen von NAP
  328.  enthalten, Geld verdient wird,  ist die schriftliche Einverständnis-
  329.  erklärung vom  Programmierer erforderlich.  Wenn nicht,  reicht eine
  330.  kurze Mitteilung  (nur so zum Spaß quasi).  Auch  an NAP selbst darf
  331.  kein Geld verdient werden.  Soll heißen, daß der Verkauf von NAP un-
  332.  tersagt bleibt, sollte der Preis die 3-DM-Grenze überschreiten.  An-
  333.  sonsten darf NAP natürlich ungehemmt kopiert  und verbreitet werden,
  334.  solange alle Dateien im Originalzustand vorhanden sind.
  335.  
  336.  Für NAP selbst wird vom Autor keine Garantie,  demzufolge auch keine
  337.  Haftung, übernommen. Das erstmalige Benutzen von NAP ist als Einver-
  338.  ständniserklärung zu sehen,  daß der Benutzer sich einverstanden er-
  339.  klärt, NAP vollkommen auf eigene Gefahr zu benutzen.
  340.  
  341.  
  342.  D A N K S A G U N G E N
  343.  
  344.  Ein großes Dankeschön geht zuerst an meinen  Amiga 500, der mir seit
  345.  etlichen Jahren treu zur Seite steht und es wahrscheinlich auch noch
  346.  einige Zeit zu machen haben wird.
  347.  Ebenfalls großer Dank geht an Herbert Breuer,  der mich seit den An-
  348.  fängen von NAP unterstützt hat  (sagen wir es mal so: ohne ihn hätte
  349.  ich wahrscheinlich nie mit der Arbeit angefangen)   und mir mit  Rat
  350.  und Tat zur Seite stand.
  351.  Desweiteren ein Danke an  David Benn,  Autor der  Programmiersprache
  352.  ACE, der mir schon bei vielen Problemen weitergeholfen hat.
  353.  Zuletzt an all die Leute, die NAP benutzen oder noch benutzen werden
  354.  und Verständnis für eventuelle Mängel zeigen.
  355.  
  356.  
  357.  D E R  A U T O R  /  K O N T A K T M Ö G L I C H K E I T E N
  358.  
  359.  Nun, der Autor von NAP bin ich ;-)  Mein Name ist Daniel Seifert und
  360.  ich wohne in  Berlin-Hellersdorf  (Hellersdorf  ist  der  östlichste
  361.  Stadtteil von Berlin).  Dort gehe ich auch zur Schule,  und zwar mo-
  362.  mentan in die 12. Klasse des 1. Gymnasiums Hellersdorf.
  363.  Falls jemand mit mir reden will, sei es wegen NAP (lese auch Kapitel
  364.  "Copyright"),  wegen  eines  meiner  anderen Programme oder weswegen
  365.  auch immer, so bin ich gern bereit, mir dafür Zeit zu nehmen.  Nicht
  366.  bereit bin ich aber, dafür Geld zu opfern. Falls also jemand längere
  367.  Unterhaltungen führen will, soll er bitte EMail benutzen. Meinen An-
  368.  schluß habe ich in meiner Schule,  weswegen es mitunter zu Verzöger-
  369.  ungen kommen  kann  (wichtige Klausuren oder Ferien).  Falls  jemand
  370.  keinen EMail-Zugang hat,  schreibe ich auch gern mit der  "normalen"
  371.  Post. Das Porto sollte mir aber vorher überwiesen werden, da ich nur
  372.  in den seltensten Fällen Post so wichtig ersehe, daß ich gewillt bin
  373.  dafür Geld auszugeben.  Wenn Sie mir also das Porto nicht  vorauser-
  374.  statten, werden Sie wahrscheinlich auch keine Antwort erhalten.
  375.  Ansonsten unterhalte ich mich aber gern mit Ihnen.
  376.  
  377.  (Postgebühren in  Deutschland  für einen 20g Brief:  1 DM für Länder
  378.  der Europäischen Gemeinschaft,  2 DM für die restlichen Länder und 3
  379.  DM für Luftpost. Falls mehr als nur ein Brief erwartet wird (länger-
  380.  er Briefaustausch),  sollte demzufolge auch mehr Geld geschickt wer-
  381.  den (logisch!). Falls das Geld nicht ausreicht, werde ich die Briefe
  382.  als  "Empfänger bezahlt"  abschicken. Ob das funktioniert,  weiß ich
  383.  aber nicht!!!)
  384.  
  385.  +---------------------------------------------------------------------+
  386.  | Daniel Seifert            //tm   Tel: (+49) 030 / 9984711           |
  387.  | Weißenfelser Str 40      //    EMail: dseifert@hell1og.be.schule.de |
  388.  | 12627 Berlin         \\ //                           +--------------+
  389.  | GERMANY               \X/ The Amiga lives ...        |/\_    _/\_   |
  390.  +------------------------------------------------------+\/\~~~~/\/\~~~|
  391.  | PGP finger print : A8B0282C985102066C8769391CF146AB  |/\/\~~/\/\/\~~|
  392.  | Public key (6D99EA5D) available on request/keyserver |\/\/\/\/\/\/\/|
  393.  +------------------------------------------------------+--------------+
  394.  
  395.  From October '96 :
  396.  
  397.  +-------------------------------------------------------------------+
  398.  | Daniel Seifert          //tm   Tel: (+49) 030 /  ? ? ?            |
  399.  | Elsenborner Weg 25     //    EMail: dseifert@hell1og.be.schule.de |
  400.  | 12621 Berlin       \\ //                             +------------+
  401.  | GERMANY             \X/ The Amiga lives ...          |   |¯\      |
  402.  +------------------------------------------------------+   |  ) _   |
  403.  | PGP finger print : A8B0282C985102066C8769391CF146AB  |   | / (_   |
  404.  | Public key (6D99EA5D) available on request/keyserver |   ¯¯  __)  |
  405.  +------------------------------------------------------+------------+
  406.